Text chyb pres WinInet
Otázka od: Lebeda David
27. 4. 2004 8:59
Ahoj,
nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se zabyvam osetrovanim
chyb. Chtel bych pro zacatek v pripade vyskytu chyby (zjistim kod v
GetLastError)
zobrazit kod a textovy popis.
V Delphi jsem nasel funkci SysErrorMessage, ktera ma prevadet kody chyb na
textovy
popis. To ale nefunguje pro kody knihovny WinInet. V knihovne WinInet jsem
nasel
funkci InternetErrorDialog, ale nedokazal jsem ji primet k tomu, aby mi opravdu
nejaky
dialog zobrazilo - proste probehne a nic se nestane. Tak nevim. Copak to
opravdu
musim delat rucne - tj. pouzit case ErrorCode of a tam pekne z ruky opsat
vsechny
konstanty, ktere najdu v WinInet.pas?
Protoze jsem si vsiml, ze na dotazy ohledne WinInet mi tu prakticky nikdo
neodpovida,
chci se zeptat - to tuto knihovnu opravdu nikdo nepouzivate, nebo je v tom neco
jineho
(know-how apod.)?
Diky
David Lebeda
Odpovedá: Ondrej Kelle
27. 4. 2004 9:17
> nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se
> zabyvam osetrovanim chyb. Chtel bych pro zacatek v pripade
> vyskytu chyby (zjistim kod v GetLastError) zobrazit kod a
> textovy popis.
>
> V Delphi jsem nasel funkci SysErrorMessage, ktera ma prevadet
> kody chyb na textovy popis. To ale nefunguje pro kody
> knihovny WinInet.
Mozes pouzit FormatMessage s flagmi FORMAT_MESSAGE_FROM_HMODULE, vid priklad
TWebConnection.Check v unite SConnect.
HTH
TOndrej
Odpovedá: Karel Pecinka
27. 4. 2004 9:38
Zkus dat cast kodu, ve kterem muze nastat chyba, do bloku try.. except,
asi takhle:
try
prikaz kde vznikne vyjimka;
except
on E: Exception do
ShowMessage(E.Message);
end;
Karel
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Lebeda David
Sent: Tuesday, April 27, 2004 9:43 AM
To: delphi-l@clexpert.cz
Subject: Text chyb pres WinInet
Ahoj,
nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se zabyvam
osetrovanim
chyb. Chtel bych pro zacatek v pripade vyskytu chyby (zjistim kod v
GetLastError)
zobrazit kod a textovy popis.
V Delphi jsem nasel funkci SysErrorMessage, ktera ma prevadet kody chyb
na textovy
popis. To ale nefunguje pro kody knihovny WinInet. V knihovne WinInet
jsem nasel
funkci InternetErrorDialog, ale nedokazal jsem ji primet k tomu, aby mi
opravdu nejaky
dialog zobrazilo - proste probehne a nic se nestane. Tak nevim. Copak to
opravdu
musim delat rucne - tj. pouzit case ErrorCode of a tam pekne z ruky
opsat vsechny
konstanty, ktere najdu v WinInet.pas?
Protoze jsem si vsiml, ze na dotazy ohledne WinInet mi tu prakticky
nikdo neodpovida,
chci se zeptat - to tuto knihovnu opravdu nikdo nepouzivate, nebo je v
tom neco jineho
(know-how apod.)?
Diky
David Lebeda
Odpovedá: Karel Kral
27. 4. 2004 12:12
>
> nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se zabyvam
osetrovanim
> chyb. Chtel bych pro zacatek v pripade vyskytu chyby (zjistim kod v
GetLastError)
> zobrazit kod a textovy popis.
Tohle je to, co potrebujes:
resourcestring
sUnknownWinINetErr = 'Chyba knihovny WinINet RYslo %d';
sErrIConnAbort = 'P?ipojenY k internetu bylo p?eruUeno';
sErrIConnReset = 'P?ipojenY k internetu bylo p?eruUeno';
{ System error messages }
function ClearSysMessage(S: string): string;
begin
while (Length(S) > 0) and (S[Length(S)] in [#0..#32, '.']) do
SetLength(S, Length(S) - 1);
Result := S;
end;
// moje doplneni nekterych chybovych kodu
function WinINetCustMessage(ErrorCode: integer): string;
begin
case ErrorCode of
ERROR_INTERNET_CONNECTION_ABORTED: Result := sErrIConnAbort;
ERROR_INTERNET_CONNECTION_RESET: Result := sErrIConnReset;
else
Result := Format(sUnknownWinINetErr, [ErrorCode]);
end; // case
end; // func
function WinINetErrorMessage(ErrorCode: Integer): string;
var
ModuleHandle: HModule;
Len: Integer;
Buffer: array[0..255] of Char;
begin
ModuleHandle := GetModuleHandle('wininet');
Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or
FORMAT_MESSAGE_ARGUMENT_ARRAY or FORMAT_MESSAGE_FROM_HMODULE,
pointer(ModuleHandle), ErrorCode, LOCALE_USER_DEFAULT, Buffer,
SizeOf(Buffer), nil);
SetString(Result, Buffer, Len);
Result := ClearSysMessage(Result);
if Result = '' then
Result := WinINetCustMessage(ErrorCode);
end;
--
______________________________________________________
Karel Kral, vedouci odd. IT / IT manager
Purus, s.r.o., Cezavy 627, 664 56 Blucina, CZ
Tel: 547 235 000, 602 552 432, Fax: 547 231 203
E-Mail: mailto:kral@purus.cz, WWW: http://www.purus.cz
______________________________________________________